// 代码执行过程
//   同步代码执行
//    代码开始执行，首先遇到 console.log("5");，直接输出 5。
//    调用 async1() 函数，进入 async1 函数内部，执行 console.log("1");，输出 1。
//    执行 await async2()，调用 async2 函数，async2 函数里执行 console.log("4");，输出 4。await 会暂停 async1 函数后续代码的执行，将 async1 函数剩余部分放入微任务队列等待。
//    执行 new Promise，Promise 构造函数中的代码是同步执行的，先执行 console.log("7"); 输出 7，接着执行 resolve()，然后执行 console.log("8"); 输出 8。resolve() 会触发 Promise 的 then 回调，该回调被放入微任务队列。
//    执行 console.log("10");，输出 10。
//  微任务队列执行
//    同步代码执行完毕后，开始处理微任务队列。先处理 async1 函数中 await 后面的代码，执行 console.log("2"); 输出 2，async1 函数返回 Promise，其 then 回调被放入微任务队列。
//    接着处理 new Promise 的 then 回调，执行 console.log("9"); 输出 9。
//    处理 async1 函数返回 Promise 的 then 回调，执行 console.log(msg); 输出 3。
//  宏任务队列执行
//    微任务队列处理完后，处理宏任务队列。setTimeout 回调函数被放入宏任务队列，执行 console.log("6"); 输出 6。

async function async1() {
  console.log("1");
  await async2();
  console.log("2");
  return "3"
}
async function async2() {
  console.log("4");
}
console.log("5");
setTimeout(function () {
  console.log("6");
}, 0);
async1().then((msg) => {
  console.log(msg);
});

new Promise(function (resolve) {
  console.log("7");
  resolve();
  console.log("8");
}).then(function () {
  console.log("9");
});
console.log("10");

// 5、1、4、7、8、10、2、9、3、6
